6010 COLOR= V/DV +1: IF ER% THEN ER% = 0: COLOR= 0
6020 FOR A = 1 TO NB: PLOT HZ +BL%(V,A,0),VZ +BL%(V,A,1): NEXT : RETURN
6100 REM <CTRL-J>Draw current block at XP,YP<CTRL-J>
6110 COLOR= C
6120 FOR A = 1 TO NB: PLOT BP%(0,0) +BP%(A,0),YP +BP%(A,1): NEXT
6130 RETURN
7000 REM <CTRL-J>Get movement<CTRL-J>
7010 PK = PDL(0):RK = PEEK( -16287)
7020 X = 0 -(PK <100) +(PK >180):R = 0 +(RK >127)
7030 RETURN
8000 REM <CTRL-J>Check BC% (Where block WILL be) for collisions<CTRL-J>
8010 CO = 0
8015 FOR A = 1 TO NB
8020 S = SCRN( BC%(0,0) +BC%(A,0),YC +BC%(A,1)):CO = CO +(S < >15 AND S < >0)
8030 NEXT
8040 RETURN
9000 REM <CTRL-J>Check if block landed<CTRL-J>
9010 CO = 0
9020 FOR A = 1 TO NB
9030 S = SCRN( BP%(0,0) +BP%(A,0),YP +BP%(A,1) +1):CO = CO +(S < >15 AND S < >0): NEXT
9040 RETURN
10000 REM <CTRL-J>Main program<CTRL-J>
10010 GOSUB 1000: REM Load stats for level L
10015 MI = BT
10020 GOSUB 2000: REM Draw level L screen
10030 GOSUB 4000:NX = V
10040 GOSUB 5000: GOSUB 14000
10043 IF NOT AB THEN 10050
10044 XB = XB +1: IF XB = AB THEN XB = 0: GOSUB 30000
10045 IF NOT AB THEN 10050
10050 BP%(0,0) = HP:YP = 3
10060 C = 15: GOSUB 6100
10070 GOSUB 7000
10075 FOR A = 1 TO PZ: NEXT
10080 IF NOT (X) AND NOT (R) THEN C = 0: GOSUB 6100:YP = YP +YB: GOTO 10140
10090 BC%(0,0) = BP%(0,0) +X:YC = YP +YB: IF NOT (R) THEN FOR A = 1 TO NB: FOR B = 0 TO 1:BC%(A,B) = BP%(A,B): NEXT : NEXT : GOTO 10110
10100 FOR A = 1 TO NB:BC%(A,1) = -(BP%(A,0)):BC%(A,0) = BP%(A,1): NEXT
10110 GOSUB 8000
10115 C = 0: GOSUB 6100
10120 IF CO THEN YP = YP +YB: GOTO 10140
10130 FOR A = 0 TO NB: FOR B = 0 TO 1:BP%(A,B) = BC%(A,B): NEXT : NEXT :YP = YC
10140 C = 15: GOSUB 6100
10150 GOSUB 9000
10160 IF NOT CO THEN 10070
10170 SD = PEEK(SO):SD = PEEK(SO):SD = PEEK(SO)
10180 TP = 40: FOR A = 1 TO NB: IF YP +BP%(A,1) <TP THEN TP = YP +BP%(A,1)
10185 IF TP <MI THEN MI = TP
10190 NEXT : IF TP <UL THEN 20000
10195 LC = 0
10200 C = CB/DV +1: GOSUB 6100
10210 F = 0: FOR A = BT TO MI STEP -1
10220 GOSUB 13000: IF (CO) THEN 10240
10230 F = F +1: GOSUB 11000:A = MI -1
10240 NEXT
10250 IF F THEN 10210
10270 IF LC THEN SC = SC +100 *LC *LC:LM = LM +LC: GOSUB 3000
10280 IF LM > = LN THEN L = L +1:TP = BT -1:LM = 0: GOTO 10010
10290 GOTO 10040
11000 REM <CTRL-J>Delete row A from box<CTRL-J>
11010 FOR T = A -1 TO MI STEP -1
11020 FOR P = XL +1 TO XR -1
11030 COLOR= SCRN( P,T): PLOT P,T +1
11033 SD = PEEK(SO)
11035 NEXT : NEXT
11045 COLOR= 0: HLIN XL +1,XR -1 AT MI:MI = MI +1: HLIN XL,XR AT BT +2
11050 TP = TP +1:LC = LC +1
11060 COLOR= 12: HLIN XL,XR AT BT +1
11070 RETURN
13000 REM <CTRL-J>Check line A for completion<CTRL-J>
13010 CO = 0: FOR B = XL +1 TO XR -1: IF SCRN( B,A) = 0 THEN CO = 1:B = XR
13020 NEXT : RETURN
14000 REM <CTRL-J>Randomize block position<CTRL-J>
14010 FOR A = 1 TO NB: FOR B = 0 TO 1:BP%(A,B) = BL%(CB,A,B): NEXT : NEXT
14020 FOR A = 1 TO INT( RND( PEEK(78) *SC +HS + PDL(1)) *4) +1
14030 FOR T = 1 TO NB:K% = BP%(T,1):BP%(T,1) = -(BP%(T,0)):BP%(T,0) = K%: NEXT
14040 RETURN
20000 REM <CTRL-J>Game over<CTRL-J>
20010 TEXT : POKE 35,20: HOME : TEXT : VTAB 12: HTAB 1: PRINT " G A M E O V E R": PRINT : IF SC > = HS THEN GOSUB 21000
20015 VTAB 16: HTAB 1: PRINT "(P)lay again, (Q)uit, (C)ontinue: ";: GET AN$: ON (AN$ = "C" OR AN$ = "c") GOTO 10000: IF AN$ = "Q" OR AN$ = "q" THEN PRINT A$: END
20020 PRINT AN$: GOTO 999
21000 S$ = RIGHT$("0000000" + STR$(SC),8)
21005 VTAB 18: INVERSE : HTAB 3: PRINT "CONGRATULATIONS! A HIGH SCORE!"
21006 NORMAL
21020 FOR T = 8 TO 30
21030 VTAB 23: HTAB T: PRINT S$: FOR P = 1 TO 100: NEXT P:SD = PEEK(SO) + PEEK(SO)
21040 VTAB 23: HTAB T: PRINT " "
21050 VTAB 23: HTAB 21: PRINT "Hiscore:"
21060 NEXT T
21070 HS = SC
21075 VTAB 23: HTAB 30: PRINT S$
21080 FOR T = 1 TO 500: NEXT T: RETURN
30000 REM <CTRL-J>Add a garbage line (scroll up)<CTRL-J>
30005 MI = MI -1
30010 FOR A = MI TO BT -1
30020 FOR P = XL +1 TO XR -1
30030 COLOR= SCRN( P,A +1): PLOT P,A
30050 NEXT : NEXT
30070 TP = TP +1
30080 FOR A = XL +1 TO XR -1:SD = PEEK(SO) + PEEK(SO): COLOR= INT( RND( PEEK(78) + PDL(1)) *4): PLOT A,BT: NEXT
59010 ON PC -2 GOSUB 59020,59030,59040: GOTO 59100
59020 XG = 16:XD = 24:UB = 5:BT = 26:NB = 3:NP = 3:DV = 1: FOR T = 1 TO 18: FOR X = 1 TO 10: READ A: NEXT : NEXT : FOR T = 1 TO 7: FOR X = 1 TO 8: READ A: NEXT : NEXT : RETURN
59030 XG = 15:XD = 25:UB = 6:BT = 29:NB = 4:NP = 7:DV = 1: FOR T = 1 TO 18: FOR X = 1 TO 10: READ A: NEXT : NEXT : RETURN